#ifndef CPosteDLLH
#define CPosteDLLH

#ifdef __BCPLUSPLUS__
#define MyBOOL bool
#else
#define MyBOOL BYTE
#endif

#ifdef __BCPLUSPLUS__
//---------------------------------------------------------------------------
#include "eic.h"
//---------------------------------------------------------------------------
#pragma pack( 2)
typedef struct {
  AnsiString strRacineAPrendre;
  AnsiString strRacineANePasPrendre;
  AnsiString strCompteANePasPrendre;
  char       cMS;         // 'M', 'S', '\0'
  char       cDebit;      // '+', '-', '\0'
  char       cCredit;     // '+', '-', '\0'
  bool       bANouveau;
} TParametragePoste;
#pragma pack()
#endif
#include "compta.h"

#define LEN_CODE_ETAT  10
#define LEN_REF_POSTE  5

#pragma pack( 2)
typedef struct {
  char CodeEtat[LEN_CODE_ETAT + 1];
  char RefPoste[LEN_REF_POSTE + 1];
} POSTES_REF;
#pragma pack()

#ifdef __BCPLUSPLUS__
//typedef void    __fastcall ( *PSTInitGroupesPostes)( CBarre *pBarre, int nNbGroupes, va_list lstGroupes);
typedef bool    __fastcall ( *PSTCompteEstDansPoste)( const AnsiString &strCompte, int nIDPoste);
typedef void    __fastcall ( *PSTGetParamPoste)( int nIDPoste, TParametragePoste &eParam);
typedef void    __fastcall ( *PSTSetParamPoste)( int nIDPoste, const TParametragePoste &eParam);
typedef void    __fastcall ( *PSTDeletePoste)( int);
typedef void    __fastcall ( *PSTDeleteGroupe)( int);
//typedef void    __fastcall ( *PSTReprendreIntitulePosteCommun)( int);
typedef void    __fastcall ( *PSTReprendrePostesFromTempDir)( int,CBarre &);
typedef void    __fastcall ( *PSTReprendrePosteFromTempDir)( int,CBarre &);
typedef bool    __fastcall ( *PSTExiste)( int nIDPoste);
typedef AnsiString __fastcall ( *PSTGetIntitulePoste)( int);
typedef void    __fastcall ( *PSTMigrerPostesTmp)( const AnsiString &RepTmp);
typedef bool               ( *PSTCloturer)(/* CBarre *Barre*/);
typedef bool               ( *PSTBasculerEuro)(/* CBarre *Barre*/);
typedef void    __fastcall ( *PSTClearParametrageUnPoste)( int nIDPoste);
#endif
#ifndef _AUTONOME
typedef MyBOOL (__stdcall    *PSTGetFirstDetailLigne)( int nIDPoste, CPTA_PC *pcInfos, POSTES_REF *ReferencePoste, MyBOOL TenirCompteDuForcage);
typedef MyBOOL (__stdcall    *PSTGetNextDetailLigne)( CPTA_PC *pcInfos, POSTES_REF *ReferencePoste);
typedef void   (__stdcall    *PSTCloseDetailLigne)( void);
typedef MyBOOL (__stdcall    *PSTGetFirstCompte)( int nIDPoste, CPTA_PC *pcInfos);
typedef MyBOOL (__stdcall    *PSTGetNextCompte)( CPTA_PC *pcInfos);
typedef void   (__stdcall    *PSTCloseCompte)( void);
typedef int    (__stdcall    *PSTEnumHIDansPoste)( unsigned short   eIDPoste, CPTA_HI_CALLBACK pfnCptaEnum, long lUserData);
typedef int    (__stdcall    *PSTEnumHIDansPosteRC)(unsigned short   eIDPoste, CPTA_HI_CALLBACK pfnCptaEnum, long lUserData, int bRecursif);
typedef void   (__stdcall    *PSTDetailLigneC)( int nIDPoste, int nIDExercice, double *pdPoste, const double *pdCalcule, double *pdSaisi, short bArrondi, short bParamPosteReadOnly);
typedef int    (__stdcall    *PSTExtraitHIDuPoste)( unsigned short   eIDPoste, CPTA_HI_CALLBACK pfnCptaEnum, long lUserData);
typedef void   (__stdcall    *PSTRechercheComptesNonRANDetaille)( unsigned short *eIDPoste, int NbPostes);
typedef int    (__stdcall    *PSTNbComptesDuPoste)( unsigned short eIDPoste);

#endif


typedef void*  (__cdecl      *PSTAlloueMemPoste)( enum TYPE_PARAM_POSTE Type, short bAutresCriteres, short ANouveau, short nbEnsemblesPostes, va_list vaPoste);
typedef void   (__cdecl      *PSTLibereMemPoste)( void* pv);
//typedef void   (__stdcall    *PSTInitGroupesPostesC)( int nNbGroupes, va_list lstPostes);
typedef int    (__stdcall    *PSTGetIDPoste)( const char* strEtat, const char* strRefPoste);
typedef MyBOOL (__stdcall    *PSTCompteEstDansPosteC)( const char* strCompte, int nIDPoste);
typedef double (__stdcall    *PSTTotalPosteC)( int nIDPoste, int nIDExercice, unsigned int usProductID);
typedef double (__stdcall    *PSTTotalPosteANC)( const char *strEtat, const char *strRefPoste, unsigned int usProductID);
typedef void   (__stdcall    *PSTOpenTables)( MyBOOL OuvrirCompta);
typedef void   (__stdcall    *PSTCloseTables)( MyBOOL FermerCompta);
typedef void   (__stdcall    *PSTForceTotalPoste)( int nIDPoste, int nIDExercice, double dValue);
//typedef void   (__stdcall    *PSTGetPoste)( unsigned short eIDPoste, POSTE *pstInfos);
typedef double (__stdcall    *PSTTotalPosteCalcC)( int nIDPoste, int nIDExercice, unsigned int usProductID);
typedef double (__stdcall    *PSTTotalPosteSaisC)( int nIDPoste, int nIDExercice, unsigned int usProductID);
typedef void   (__stdcall    *PSTSaisiePoste)( int nIDPoste, MyBOOL bAutresCriteres, MyBOOL bPrendreAN, MyBOOL bReadOnly);
typedef char * (__stdcall    *PSTGetIntitulePosteC)( int nIDPoste);
typedef void   (__stdcall    *PSTClearPrecalPostes)( int nIDPoste);
typedef double (__stdcall    *PSTTotalPostePeriodeC)( int nIDPoste, const dateDOS DateFinN, unsigned int usProductID);



#ifdef __BCPLUSPLUS__
class PACKAGE_COMPTA CPosteDLL
{
  private:

    HINSTANCE                     m_hinstPostes;
//    PSTInitGroupesPostes          m_pfncInitGroupesPostes;
    PSTSaisiePoste                m_pfncSaisiePoste;
    PSTCompteEstDansPoste         m_pfncCompteEstDansPoste;
    PSTGetFirstDetailLigne        m_pfncGetFirstDetailLigne;
    PSTGetNextDetailLigne         m_pfncGetNextDetailLigne;
    PSTCloseDetailLigne           m_pfncCloseDetailLigne;
    PSTGetFirstCompte             m_pfncGetFirstCompte;
    PSTGetNextCompte              m_pfncGetNextCompte;
    PSTCloseCompte                m_pfncCloseCompte;
    PSTDeletePoste                m_pfncDeletePoste;
    PSTDeleteGroupe               m_pfncDeleteGroupe;
//    PSTReprendreIntitulePosteCommun m_pfncReprendreIntitulePosteCommun;
    PSTReprendrePostesFromTempDir m_pfncReprendrePostesFromTempDir;
    PSTReprendrePosteFromTempDir  m_pfncReprendrePosteFromTempDir;
//    PSTCloturer                   m_pfncCloturer;
//    PSTBasculerEuro               m_pfncBasculerEuro;
    PSTOpenTables                 m_pfncOpenTables;
    PSTCloseTables                m_pfncCloseTables;
    PSTGetParamPoste              m_pfncGetParamPoste;
    PSTSetParamPoste              m_pfncSetParamPoste;
    PSTExiste                     m_pfncExiste;
    PSTGetIntitulePoste           m_pfncGetIntitulePoste;
    PSTMigrerPostesTmp            m_pfncMigrerPostesTmp;
    PSTClearPrecalPostes          m_pfncClearPrecalPostes;
    PSTClearParametrageUnPoste    m_pfncClearParametrageUnPoste;

  public:
    __fastcall  CPosteDLL( void);
    virtual __fastcall ~CPosteDLL( void);

//           void __cdecl    InitGroupesPostes( CBarre *pBarre, int nNbGroupes, ...);
    inline void __fastcall SaisiePoste( int nIDPoste, bool bAutresCriteres, bool bPrendreAN, bool bReadOnly) { m_pfncSaisiePoste( nIDPoste, bAutresCriteres, bPrendreAN, bReadOnly); };
    inline bool __fastcall CompteEstDansPoste( const AnsiString &strCompte, int nIDPoste) { return m_pfncCompteEstDansPoste( strCompte, nIDPoste); };
    inline bool __fastcall GetFirstDetailLigne( int nIDPoste, CPTA_PC *pcInfos, POSTES_REF *ReferencePoste, bool TenirCompteDuForcage) { return m_pfncGetFirstDetailLigne( nIDPoste, pcInfos, ReferencePoste, TenirCompteDuForcage); };
    inline bool __fastcall GetNextDetailLigne( CPTA_PC *pcInfos, POSTES_REF *ReferencePoste) { return m_pfncGetNextDetailLigne( pcInfos, ReferencePoste); };
    inline void __fastcall CloseDetailLigne( void) { m_pfncCloseDetailLigne(); };
    inline bool __fastcall GetFirstCompte( int nIDPoste, CPTA_PC *pcInfos) { return m_pfncGetFirstCompte( nIDPoste, pcInfos); };
    inline bool __fastcall GetNextCompte( CPTA_PC *pcInfos) { return m_pfncGetNextCompte( pcInfos); };
    inline void __fastcall CloseCompte( void) { m_pfncCloseCompte(); };
    inline void __fastcall DeletePoste( int nIDPoste) { m_pfncDeletePoste( nIDPoste); };
    inline void __fastcall DeleteGroupe( int nIDGroupe) { m_pfncDeleteGroupe( nIDGroupe); };
//    inline void __fastcall ReprendreIntitulePosteCommun( int nIDGroupe) { m_pfncReprendreIntitulePosteCommun( nIDGroupe); };
    inline void __fastcall ReprendrePostesFromTempDir( int nIDGroupe,CBarre &Barre) { m_pfncReprendrePostesFromTempDir( nIDGroupe,Barre); };
    inline void __fastcall ReprendrePosteFromTempDir( int nIDPoste,CBarre &Barre) { m_pfncReprendrePosteFromTempDir( nIDPoste,Barre); };
//    inline bool __fastcall Cloturer(CBarre *Barre) { return m_pfncCloturer(Barre); };
//    inline bool __fastcall BasculerEuro(CBarre *Barre) { return m_pfncBasculerEuro(Barre); };
    inline void __fastcall OpenTables() { m_pfncOpenTables(false); };
    inline void __fastcall CloseTables() { m_pfncCloseTables(false); };
    inline void __fastcall GetParamPoste( int nIDPoste, TParametragePoste &eParam) { m_pfncGetParamPoste( nIDPoste, eParam); };
    inline void __fastcall SetParamPoste( int nIDPoste, const TParametragePoste &eParam) { m_pfncSetParamPoste( nIDPoste, eParam); };
    inline bool __fastcall Existe( int nIDPoste) { return m_pfncExiste( nIDPoste); };
    inline AnsiString __fastcall GetIntitulePoste( int nIDPoste) { return m_pfncGetIntitulePoste( nIDPoste); }
    inline void __fastcall MigrerPostesTmp( const AnsiString &RepTmp) { return m_pfncMigrerPostesTmp( RepTmp); }
    inline void __stdcall ClearPrecalPostes(int nIDPoste) { return m_pfncClearPrecalPostes( nIDPoste); }
    inline void __fastcall ClearParametrageUnPoste(int nIDPoste) { return m_pfncClearParametrageUnPoste( nIDPoste); }

};
#endif
//---------------------------------------------------------------------------
#endif
